package main

import (
	"encoding/json"
	"log"
	"os"
)

// APP 程序的配置
var APP = &Config{
	RepositoriesDir: "/data/SVN_Repos/2024_ifsvnadmin_docmgt",
	SvnlookBin:      "svnlook",
	SvnadminBin:     "svnadmin",

	// windows 系统使用 winscp，并将bin目录添加到系统path中
	// linux 系统使用 sshpass+scp 命令，ubuntu系统需要安装 apt install sshpass
	// NOTE: 由于ssh第一次需要签名，所以该主机需要先手动连接一次scp主机，并在该提示后输入yes：Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
	ScpBin: "winscp", // scp or winscp

	BakHost:             "192.168.0.5",
	BakHostSFTPUsername: "bing",
	BakHostSFTPPwd:      "bing",
	BakHostWorkdir:      "/data/SVN_Repos/svndump-19a",
}

// Config 配置
type Config struct {
	RepositoriesDir string // 仓库目录

	SvnlookBin  string // exe文件的路径
	SvnadminBin string // exe文件的路径
	ScpBin      string // exe文件的路径

	//备份服务器
	BakHost             string
	BakHostSFTPUsername string
	BakHostSFTPPwd      string
	BakHostWorkdir      string
}

// 启动时自动加载配置
func init() {
	const configFile = "config.json"

	//读取配置文件内容
	data, err := os.ReadFile(configFile)
	if err != nil {
		if os.IsNotExist(err) {
			//生成一个默认的配置文件
			data1, _ := json.MarshalIndent(APP, "", "    ")
			if err := os.WriteFile(configFile, data1, 0644); err != nil {
				log.Panicln("[P]", err)
			}
			log.Println("[I] 已经生成默认的配置文件")
			os.Exit(1)
		}
		log.Panicln("[P]", err)
	}

	//	读取配置
	if err := json.Unmarshal(data, APP); err != nil {
		log.Panicln("[P] 配置文件错误：", err)
	}
}
